Generally, computer networks include numerous components in the form of, for example, computing devices and peripheral devices. These devices may be represented as nodes such as requester nodes, each of which is capable of making one or more independent requests for something from one of a plurality of acceptor nodes. Additionally, each device may be represented as including a plurality of such nodes and may even be viewed as its own network. For communication efficiency, it is assumed that all requests from requestor nodes are funneled through a common communication conduit to acceptor nodes. The entrance to this communication conduit may be represented as a gateway, which serves as a network interface. Generally, with such networks, there is a maximum time that each individual request from a requestor node may be pending after it has been sent until a response from the acceptor node should arrive back at the requestor node. After this period of time, a record of this lack of response may be desired and a signal provided to some other apparatus. While one of the most common reasons for such a signal is to declare that a response has not been generated in some predetermined period of time, and thus, perhaps never will due to a malfunction somewhere in the system, other applications may wish to use this information to gauge overall system performance, such as, for example, what is the average time between a request and a response.
In conventional systems, one possible way in which to handle time-out detecting may be to associate a “watchdog” timer with each and every request, start the timer when a request is made, and stop it when the response arrives. If the watchdog timer reaches a maximum before a response arrives, the timer flags a possible error condition. Such timers may be found in either the requesters or the gateway, or both. One problem with such an approach is that once all timers are in use, no more requests may be made.
A second possible approach to error detecting may be to bundle, at the gateway, all requests over some period of time until all requests from a prior bundle have been received. Once the prior bundle of requests has been received, a new bundle of requests may be released. Such an approach may require a potentially large or unbounded amount of storage at the gateway to defer requests. Additionally, it may insert needless delays in moving the requests out to the system where they may be handled.
Another possible approach to the error detecting may be to maintain, either in the gateway or each requestor, for each outgoing request, a request identifier time tag at which a request was sent. The time tag may be erased when the response is received. Periodic checks of all time tags stored in the gateway may identify when a request is overdue. However, once again, such an approach requires resources that, once all are in use, may require suspending more requests until one or more of the resources are available.